package com.company.collectionsFramework;

import com.company.generic.Hero;

import java.util.LinkedList;

/**
 * 序列分先进先出FIFO， 后进后出FILO
 * FILO在java中Queue 队列
 * FILO在java中又叫Stack栈
 * **/

public class TestLinked {
    /**
     * 与ArrayList一样，Linked也实现了List接,诸如add， remove， contains等等方法，详细使用
     * **/

    /**
     * 双向链表
     * 除了实现List接口外， LinkedList还实现了双向链表结构Deque，可以和方便的在头尾插入/删除数据
     * 什么是 链表结构： 与数组结构相比较，数据结构就好像是电影院，每个位置都有标示，每个位置之间的间隔都是一样的。
     * 而链表就相当于佛珠， 每个柱子，只是连接前一个和后一个，不用关心除此之外的其他佛珠在哪里。
     * 0-0-0-0-0-0-0-0-0
     * 类似这样
    **/
    public static void main(String[] args) {
        //LinkedList是一个双向链表结构的list
        LinkedList<Hero> ll = new LinkedList<>();
        //所以可以很方便的在头部和尾部插入数据
        //在最后插入新的英雄
        ll.addLast(new Hero("hero1"));
        ll.addLast(new Hero("hero2"));
        ll.addLast(new Hero("hero3"));
        System.out.println(ll);

        //在最前面插入新的英雄
        ll.addFirst(new Hero("heroX"));
        System.out.println(ll);

        //查看最前面的英雄
        System.out.println(ll.getFirst());
        //查勘表最后面的东西
        System.out.println(ll.getLast());

        //查看不会导致英雄被删除
        System.out.println(ll);
        //取出最前面的英雄
        System.out.println(ll.removeFirst());
        //取出最后的英雄
        System.out.println(ll.removeLast());

        //取出会导致英雄被删除
        System.out.println(ll);
    }

}
